package xarticle

import (
	"encoding/json"
	"time"

	"gitee.com/xiaoyutab/xgotool/optional/xcache"
)

// 文章同步队列，用于将草稿中的文章同步到已发布的文章中去
//
//	NSQ	xarticle.audit99	<ArticleEdits>
func articleSync(p []byte) error {
	var err error
	mod_edits := ArticleEdits{}
	if err = json.Unmarshal(p, &mod_edits); err != nil {
		return err
	}
	ar := &Article{}
	if mod_edits.ArticleId > 0 {
		ar, err = Info(mod_edits.ArticleId)
		if err != nil {
			return err
		}
	}
	ar.UserId = mod_edits.UserId
	ar.Title = mod_edits.Title
	ar.UpdatedAt = time.Now().Format(time.DateTime)
	if ar.CreatedAt == "" {
		ar.CreatedAt = time.Now().Format(time.DateTime)
	}
	err = _default.DB.Table(_default.ArticleName).Save(ar).Error
	if err != nil {
		return err
	}
	err = _default.DB.Table(_default.ArticleContentName).Save(&ArticleContent{
		ArticleId: ar.Id,
		Content:   mod_edits.Content,
	}).Error
	if err != nil {
		return err
	}
	// 如果是创建的话，此处需要将审核的记录关联到文章中
	if mod_edits.ArticleId == 0 {
		mod_edits.ArticleId = ar.Id
		err = _default.DB.Table(_default.ArticleEditsName).Save(mod_edits).Error
		if err != nil {
			return err
		}
	}
	// 清空文章缓存
	xcache.Remove(xcache.Key("xarticle.Info", ar.Id))
	return nil
}

// 文章浏览操作
//
//	NSQ	xarticle.brow	<ArticleBrowse>
func articleBrow(p []byte) error {
	article := ArticleEdits{}
	if err := json.Unmarshal(p, &article); err != nil {
		return err
	}
	// 插入文章浏览记录
	err := _default.DB.Create(&article).Error
	if err != nil {
		return err
	}
	// 修改文章浏览量
	ar, err := Info(article.ArticleId)
	if err != nil {
		return err
	}
	ar.BrowseNum++
	err = _default.DB.Table(_default.ArticleName).Select("browse_num").Save(ar).Error
	if err != nil {
		return err
	}
	// 修改缓存的浏览量
	xcache.SetStruct(xcache.Key("xarticle.Info", article.ArticleId), ar)
	return nil
}
